#ifndef SHADERPROGRAM
#define SHADERPROGRAM

#include "Base.h"
#include <vector>
class Shader;
///A ShaderProgram class holds and links shaders into a ShaderProgram which is bound in the GPU during rendering.
class ShaderProgram
{
public:
	ShaderProgram(Shader* vertexShader, Shader* fragmentShader);
	~ShaderProgram();
	///Adds a vertex attribute. 
	void addAttribute(const std::string& attribute);
	///Links the ShaderProgram
	void Link();
	///Retrieves the uniform location of a uniform
	int getUniformLocation(const std::string& uniform);
	///Binds and activates the Shader Program
	void Use();
	///returns the OpenGL Shader ID
	unsigned int getID();
private:
	Shader* vs;
	Shader* fs;
	PInt progID;
	std::vector<std::string> attributes;
};

#endif